From a4bc02d9ddf84d33ab98c0f57ffb6a5ce0edc6ba Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Sat, 12 May 2007 12:43:16 +0100 Subject: [PATCH] xen: Fix struct-size checker for unions and long names. Signed-off-by: Alex Williamson --- xen/include/public/foreign/mkchecker.py | 4 ++-- xen/include/public/foreign/mkheader.py | 16 ++++++++++++- xen/include/public/foreign/reference.size | 28 +++++++++++------------ xen/include/public/foreign/structs.py | 2 ++ 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/xen/include/public/foreign/mkchecker.py b/xen/include/public/foreign/mkchecker.py index b30e82a331..9da1e2b1d1 100644 --- a/xen/include/public/foreign/mkchecker.py +++ b/xen/include/public/foreign/mkchecker.py @@ -29,14 +29,14 @@ for a in archs: f.write('int main(int argc, char *argv[])\n{\n'); f.write('\tprintf("\\n");'); -f.write('printf("%-20s |", "structs");\n'); +f.write('printf("%-25s |", "structs");\n'); for a in archs: f.write('\tprintf("%%8s", "%s");\n' % a); f.write('\tprintf("\\n");'); f.write('\tprintf("\\n");'); for struct in structs: - f.write('\tprintf("%%-20s |", "%s");\n' % struct); + f.write('\tprintf("%%-25s |", "%s");\n' % struct); for a in archs: if a == arch: s = struct; # native diff --git a/xen/include/public/foreign/mkheader.py b/xen/include/public/foreign/mkheader.py index a5310eb8b5..3d75a7a4b6 100644 --- a/xen/include/public/foreign/mkheader.py +++ b/xen/include/public/foreign/mkheader.py @@ -1,7 +1,7 @@ #!/usr/bin/python import sys, re; -from structs import structs, defines; +from structs import unions, structs, defines; # command line arguments arch = sys.argv[1]; @@ -110,6 +110,16 @@ input = re.sub("#define[^\n]+\n", "", input); input = re.compile("/\*(.*?)\*/", re.S).sub("", input) input = re.compile("\n\s*\n", re.S).sub("\n", input); +# add unions to output +for union in unions: + regex = "union\s+%s\s*\{(.*?)\n\};" % union; + match = re.search(regex, input, re.S) + if None == match: + output += "#define %s_has_no_%s 1\n" % (arch, union); + else: + output += "union %s_%s {%s\n};\n" % (union, arch, match.group(1)); + output += "\n"; + # add structs to output for struct in structs: regex = "struct\s+%s\s*\{(.*?)\n\};" % struct; @@ -135,6 +145,10 @@ for define in defines: replace = define + "_" + arch; output = re.sub("\\b%s\\b" % define, replace, output); +# replace: unions +for union in unions: + output = re.sub("\\b(union\s+%s)\\b" % union, "\\1_%s" % arch, output); + # replace: structs + struct typedefs for struct in structs: output = re.sub("\\b(struct\s+%s)\\b" % struct, "\\1_%s" % arch, output); diff --git a/xen/include/public/foreign/reference.size b/xen/include/public/foreign/reference.size index f35d281d48..f2d2eee805 100644 --- a/xen/include/public/foreign/reference.size +++ b/xen/include/public/foreign/reference.size @@ -1,17 +1,17 @@ -structs | x86_32 x86_64 ia64 +structs | x86_32 x86_64 ia64 -start_info | 1104 1152 1152 -trap_info | 8 16 - -pt_fpreg | - - 16 -cpu_user_regs | 68 200 496 -xen_ia64_boot_param | - - 96 -ia64_tr_entry | - - 32 -vcpu_extra_regs | - - 536 -vcpu_guest_context | 2800 5168 1056 -arch_vcpu_info | 24 16 0 -vcpu_time_info | 32 32 32 -vcpu_info | 64 64 48 -arch_shared_info | 268 280 272 -shared_info | 2584 3368 4384 +start_info | 1104 1152 1152 +trap_info | 8 16 - +pt_fpreg | - - 16 +cpu_user_regs | 68 200 496 +xen_ia64_boot_param | - - 96 +ia64_tr_entry | - - 32 +vcpu_extra_regs | - - 536 +vcpu_guest_context | 2800 5168 1056 +arch_vcpu_info | 24 16 0 +vcpu_time_info | 32 32 32 +vcpu_info | 64 64 48 +arch_shared_info | 268 280 272 +shared_info | 2584 3368 4384 diff --git a/xen/include/public/foreign/structs.py b/xen/include/public/foreign/structs.py index 6ecd1aa3dd..32b4ef2987 100644 --- a/xen/include/public/foreign/structs.py +++ b/xen/include/public/foreign/structs.py @@ -1,5 +1,7 @@ # configuration: what needs translation +unions = [ ]; + structs = [ "start_info", "trap_info", "pt_fpreg", -- 2.30.2